From 0e3a022f8cfe382c960da254f632eaec4ec6dfcf Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Tue, 15 Nov 2005 14:59:59 +0100 Subject: [PATCH] Extra tracing in Xen to support XenMon. Signed-off-by: Rob Gardner I also appied some fixes and simplifications to the tracing. Signed-off-by: Keir Fraser --- xen/common/grant_table.c | 7 +++++++ xen/common/schedule.c | 28 +++++++++++++++++----------- xen/include/public/trace.h | 7 +++++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 6425ab8f9f..f1b4d345ed 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -29,6 +29,7 @@ #include #include #include +#include #if defined(CONFIG_X86_64) #define GRANT_PTE_FLAGS (_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER) @@ -379,6 +380,8 @@ __gnttab_map_grant_ref( } } + TRACE_1D(TRC_MEM_PAGE_GRANT_MAP, dom); + ld->grant_table->maptrack[handle].domid = dom; ld->grant_table->maptrack[handle].ref_and_flags = (ref << MAPTRACK_REF_SHIFT) | @@ -463,6 +466,8 @@ __gnttab_unmap_grant_ref( return GNTST_bad_domain; } + TRACE_1D(TRC_MEM_PAGE_GRANT_UNMAP, dom); + act = &rd->grant_table->active[ref]; sha = &rd->grant_table->shared[ref]; @@ -802,6 +807,8 @@ gnttab_transfer( page_set_owner(page, e); spin_unlock(&e->page_alloc_lock); + + TRACE_1D(TRC_MEM_PAGE_GRANT_TRANSFER, e->domain_id); /* Tell the guest about its new page frame. */ sha = &e->grant_table->shared[gop->ref]; diff --git a/xen/common/schedule.c b/xen/common/schedule.c index 3c0d50bfc8..7a0b622373 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -13,15 +13,6 @@ * */ -/*#define WAKE_HISTO*/ -/*#define BLOCKTIME_HISTO*/ - -#if defined(WAKE_HISTO) -#define BUCKETS 31 -#elif defined(BLOCKTIME_HISTO) -#define BUCKETS 200 -#endif - #include #include #include @@ -45,6 +36,8 @@ extern void arch_getdomaininfo_ctxt(struct vcpu *, static char opt_sched[10] = "sedf"; string_param("sched", opt_sched); +/*#define WAKE_HISTO*/ +/*#define BLOCKTIME_HISTO*/ #if defined(WAKE_HISTO) #define BUCKETS 31 #elif defined(BLOCKTIME_HISTO) @@ -205,9 +198,7 @@ void vcpu_wake(struct vcpu *v) if ( likely(domain_runnable(v)) ) { SCHED_OP(wake, v); -#ifdef WAKE_HISTO v->wokenup = NOW(); -#endif } clear_bit(_VCPUF_cpu_migrated, &v->vcpu_flags); spin_unlock_irqrestore(&schedule_data[v->processor].schedule_lock, flags); @@ -416,11 +407,26 @@ static void __enter_scheduler(void) return continue_running(prev); } + TRACE_2D(TRC_SCHED_SWITCH_INFPREV, + prev->domain->domain_id, now - prev->lastschd); + TRACE_3D(TRC_SCHED_SWITCH_INFNEXT, + next->domain->domain_id, now - next->wokenup, r_time); + clear_bit(_VCPUF_running, &prev->vcpu_flags); set_bit(_VCPUF_running, &next->vcpu_flags); perfc_incrc(sched_ctx); + /* + * Logic of wokenup field in domain struct: + * Used to calculate "waiting time", which is the time that a domain + * spends being "runnable", but not actually running. wokenup is set + * set whenever a domain wakes from sleeping. However, if wokenup is not + * also set here then a preempted runnable domain will get a screwed up + * "waiting time" value next time it is scheduled. + */ + prev->wokenup = NOW(); + #if defined(WAKE_HISTO) if ( !is_idle_task(next->domain) && next->wokenup ) { diff --git a/xen/include/public/trace.h b/xen/include/public/trace.h index 47b4bdd189..cdcf447c10 100644 --- a/xen/include/public/trace.h +++ b/xen/include/public/trace.h @@ -14,6 +14,7 @@ #define TRC_SCHED 0x0002f000 /* Xen Scheduler trace */ #define TRC_DOM0OP 0x0004f000 /* Xen DOM0 operation trace */ #define TRC_VMX 0x0008f000 /* Xen VMX trace */ +#define TRC_MEM 0x000af000 /* Xen memory trace */ #define TRC_ALL 0xfffff000 /* Trace subclasses */ @@ -40,6 +41,12 @@ #define TRC_SCHED_S_TIMER_FN (TRC_SCHED + 11) #define TRC_SCHED_T_TIMER_FN (TRC_SCHED + 12) #define TRC_SCHED_DOM_TIMER_FN (TRC_SCHED + 13) +#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED + 14) +#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED + 15) + +#define TRC_MEM_PAGE_GRANT_MAP (TRC_MEM + 1) +#define TRC_MEM_PAGE_GRANT_UNMAP (TRC_MEM + 2) +#define TRC_MEM_PAGE_GRANT_TRANSFER (TRC_MEM + 3) /* trace events per subclass */ #define TRC_VMX_VMEXIT (TRC_VMXEXIT + 1) -- 2.30.2